package com.redepronik.negosysdis.invfac.controller;

import static com.redepronik.negosys.utils.Utils.parametro;
import static com.redepronik.negosys.utils.Utils.presentaMensaje;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;
import org.primefaces.model.StreamedContent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.redepronik.negosys.invfac.entity.Producto;
import com.redepronik.negosys.invfac.entityAux.CodigoProductoReporte;
import com.redepronik.negosys.invfac.service.ProductoService;
import com.redepronik.negosys.utils.service.ReporteService;

@Controller
@Scope("session")
public class CodigoBarraBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Autowired
	private ProductoService productoService;

	@Autowired
	private ReporteService reporteService;

	private List<Producto> listaProductoBusqueda;
	private String criterioProductoBusqueda;
	private Producto producto;
	private String codigoTipo;
	private String codigo;
	private StreamedContent codigoBarra;

	public CodigoBarraBean() {
	}

	@PostConstruct
	public void init() {
		limpiarObjetosBusquedaProductos();
		codigoTipo = "ean";
	}

	public void generarCodigo() {
		codigoBarra = productoService.generarCodigo(producto, codigoTipo);
	}

	public String getCodigo() {
		return codigo;
	}

	public StreamedContent getCodigoBarra() {
		return codigoBarra;
	}

	public String getCodigoTipo() {
		return codigoTipo;
	}

	public String getCriterioProductoBusqueda() {
		return criterioProductoBusqueda;
	}

	public List<Producto> getListaProductoBusqueda() {
		return listaProductoBusqueda;
	}

	public Producto getProducto() {
		return producto;
	}

	public void limpiarObjetosBusquedaProductos() {
		criterioProductoBusqueda = new String();
		listaProductoBusqueda = new ArrayList<Producto>();
		producto = new Producto();
	}

	public void obtenerProducto() {
		producto = productoService.obtenerPorProductoId(producto
				.getProductoid());
		generarCodigo();
	}

	public void obtenerProductosPorBusqueda() {
		listaProductoBusqueda = productoService
				.obtenerParaBusqueda(criterioProductoBusqueda.toUpperCase());
	}

	public void reporteCodigoProducto(ActionEvent actionEvent) {
		RequestContext context = RequestContext.getCurrentInstance();
		boolean bn = false;

		if (producto == null || producto.getProductoid() == null
				|| producto.getProductoid() == 0) {
			presentaMensaje(FacesMessage.SEVERITY_ERROR, "ESCOJA UN PRODUCTO");
			bn = true;
		} else {
			
//			generarCodigo();
			List<CodigoProductoReporte> lista = new ArrayList<CodigoProductoReporte>();
			lista.add(new CodigoProductoReporte(codigo, productoService.nombre(
					producto).getNombreimprimir(), parametro
					.getNombrecomercial()));
			Map<String, Object> parametros = new HashMap<String, Object>();
			parametros.put("razonSocial", parametro.getNombrecomercial());
			parametros.put("paginaWeb", "WWW."
					+ parametro.getNombrecomercial().replaceAll(" ", "")
					+ ".COM");
			reporteService.generarReportePDFSencillo(lista, parametros,
					"codigoBarra");
		}
		context.addCallbackParam("error", bn ? true : false);
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public void setCodigoBarra(StreamedContent codigoBarra) {
		this.codigoBarra = codigoBarra;
	}

	public void setCodigoTipo(String codigoTipo) {
		this.codigoTipo = codigoTipo;
	}

	public void setCriterioProductoBusqueda(String criterioProductoBusqueda) {
		this.criterioProductoBusqueda = criterioProductoBusqueda;
	}

	public void setListaProductoBusqueda(List<Producto> listaProductoBusqueda) {
		this.listaProductoBusqueda = listaProductoBusqueda;
	}

	public void setProducto(Producto producto) {
		this.producto = producto;
	}

}
